<?php
namespace App\Intelihelp\Controller;

use Foxforms\Widget\Field\Select;

use Foxforms\Widget\Field\TextArea;

use Foxforms\Widget\Field\Input;

use Foxforms\Widget\Form;

class equipeController extends \Foxframe\Controller
{
	public function index($params = array())
	{
		$this->redirect(BASE_PATH.'intelihelp/equipe/viewListar');
	}

	public function viewListar($params = array())
	{
		$lista = $this->em->getRepository('Entities\Intelihelp\Equipe')->listar()->getResult();
		$this->view->assign('lista', $lista);
		$this->view->assign('label', 'Equipe');
	}

	public function viewSalvar($params = array())
	{
		if (isset($params['id']) && !empty($params['id']))
			$equipe	= $this->em->find('\Entities\Intelihelp\Equipe', $params['id']);
		else
			$equipe	= new \Entities\Intelihelp\Equipe();

		$form	= new Form();
		$form->addValues($equipe, 'equipe');
		$form->addElement(Input::create('application')->setType('hidden')->setValue('intelihelp'));
		$form->addElement(Input::create('controller')->setType('hidden')->setValue('equipe'));
		$form->addElement(Input::create('method')->setType('hidden')->setValue('saveEquipe'));
		$form->addElement(Input::create('equipe[version]')->setType('hidden'));
		$form->addElement(Input::create('equipe[id_equipe]')->setType('hidden'));
		$form->addElement(
			Input::create('equipe[ds_nome]')
				->setLabel('Nome')
				->validate()
				->addClass('input-xlarge')
				->setMaxLength(255)
		);
		$form->addElement(
			TextArea::create('equipe[ds_observacao]')
				->setLabel('Observação')
		);
		$form->addElement(
			Select::create('equipe[fl_executor]')
				->setLabel('Executor')
				->setOption(array(1 => 'Sim', 0 => 'Não'))
				->validate()
		);
		$form->addElement(Input::create('salvar')->setType('submit')->setValue('Salvar')->addClass(array('btn','btn-primary')));
		$this->view->assign('form', $form);
		$this->view->assign('equipe', $equipe);
		$this->view->assign('aba', isset($params['aba']) ? $params['aba'] : 'tabForm');
	}

	public function saveEquipe($params = array())
	{
		try
		{
			$equipe = new \Foxframe\Service();
			$equipe->save($params['equipe'], '\Entities\Intelihelp\Equipe');
			$this->em->flush();

			$this->setFlash('Success', 'Sucesso', 'Equipe salva com sucesso');
		}
		catch (Exception $e)
		{
			$this->setFlash('Error', 'Erro ao salvar equipe', $e->getMessage());
		}
		$this->redirect($this->uri->getOrigem());
	}

	public function viewAdicionarMembro($params = array())
	{
		if (isset($params['id']) && !empty($params['id']))
			$equipe	= $this->em->find('\Entities\Intelihelp\Equipe', $params['id']);
		else
			$equipe	= new \Entities\Intelihelp\Equipe();

		$form	= new Form();
		$form->addValues($equipe, 'equipe');
		$form->addElement(Input::create('application')->setType('hidden')->setValue('intelihelp'));
		$form->addElement(Input::create('controller')->setType('hidden')->setValue('equipe'));
		$form->addElement(Input::create('method')->setType('hidden')->setValue('saveAdicionarMembro'));
		$form->addElement(Input::create('equipe[id_equipe]')->setType('hidden'));
		$form->addElement(
				Select::create('equipe[id_pessoa][]')
				->setLabel('Nome')
				->validate()
				->setOption($this->em->getRepository('\Entities\Intelihelp\Equipe')->listNaoMembroCombo($equipe))
				->multiple()
		);
		$form->addElement(Input::create('salvar')->setType('submit')->setValue('Salvar')->addClass(array('btn','btn-primary')));
		$this->view->assign('form', $form);
		return $this->returnAjax();
	}

	public function saveAdicionarMembro($params = array())
	{
		try
		{
			$equipe	= $this->em->find('\Entities\Intelihelp\Equipe', $params['equipe']['id_equipe']);
			foreach ($params['equipe']['id_pessoa'] as $idpessoa)
			{
				$equipe->addPessoa($this->em->find('\Entities\Corp\Pessoa', $idpessoa));
			}

			$this->em->persist($equipe);
			$this->em->flush();
			$this->setFlash('Success', 'Sucesso', 'Membro(s) adicionado(s) à equipe com sucesso');
		}
		catch (Exception $e)
		{
			$this->setFlash('Error', 'Erro ao adicionar membro(s) na equipe', $e->getMessage());
		}
		$this->redirect(BASE_PATH."intelihelp/equipe/viewSalvar/id/{$equipe->getIdEquipe()}/aba/tabMembro");
	}

	public function deleteMembro($params = array())
	{
		try
		{
			$equipe	= $this->em->find('\Entities\Intelihelp\Equipe', $params['idequipe']);
			$pessoa	= $this->em->find('\Entities\Corp\Pessoa', $params['idpessoa']);

			$equipe->get('pessoas')->removeElement($pessoa);
			$this->em->persist($equipe);
			$this->em->flush();
			$this->setFlash('Success', 'Sucesso', 'Membro removido da equipe com sucesso');
		}
		catch (Exception $e)
		{
			$this->setFlash('Error', 'Erro ao remover membro da equipe', $e->getMessage());
		}
		$this->redirect(BASE_PATH."intelihelp/equipe/viewSalvar/id/{$equipe->getIdEquipe()}/aba/tabMembro");
	}

	public function returnMembros($params = array())
	{
		$equipe	= $this->em->find('\Entities\Intelihelp\Equipe', $params['id']);
		$retorno['idresponsavel']	= $this->em->getRepository('\Entities\Intelihelp\Equipe')->listMembroCombo($equipe);
		echo json_encode($retorno);
		die;
	}
}